/*
 * EEPROM Write
 *
 * Stores values read from analog input 0 into the EEPROM.
 * These values will stay in the EEPROM when the board is
 * turned off and may be retrieved later by another sketch.
 */

#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int addr = 0;

void setup() {
  // initialize EEPROM object
  EEPROM.begin();
}

void loop() {
  /***
    Need to divide by 4 because analog inputs range from
    0 to 1023 and each byte of the EEPROM can only hold a
    value from 0 to 255.
  ***/

  int val = analogRead(0) / 4;

  /***
    Write the value to the appropriate address of the EEPROM.
    After calling commit() these values will remain there when 
    the board is turned off.
  ***/

  EEPROM.write(addr, val);

  /***
    Advance to the next address. Call commit() every 10th address.
  ***/
  addr = addr + 1;
  if (addr%10==0) {
    EEPROM.commit(); // Use EEPROM.commit() to write data to permanent storage
  }
  
/***
    When at the end restart at the beginning.

    The CH32 EEPROM library uses the user storage area, allowing 26 bytes of emulated EEPROM on the CH32V003.

    Other processors may have larger EEPROM sizes, e.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
  ***/
  
  if (addr == EEPROM.length()) {
    addr = 0;
  }

  delay(200);
}
